1b6a906aeSopenharmony_cidiff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp
2b6a906aeSopenharmony_ciindex f233abb..8f4c544 100755
3b6a906aeSopenharmony_ci--- a/src/lib_json/json_reader.cpp
4b6a906aeSopenharmony_ci+++ b/src/lib_json/json_reader.cpp
5b6a906aeSopenharmony_ci@@ -1666,6 +1666,12 @@ bool OurReader::decodeDouble(Token& token, Value& decoded) {
6b6a906aeSopenharmony_ci   const String buffer(token.start_, token.end_);
7b6a906aeSopenharmony_ci   IStringStream is(buffer);
8b6a906aeSopenharmony_ci   if (!(is >> value)) {
9b6a906aeSopenharmony_ci+    // the value could be lower than numeric_limits<double>::min(), in this situtation we should return the value with the gurantee
10b6a906aeSopenharmony_ci+    // of conversion which has been performed and no occurances of range error.
11b6a906aeSopenharmony_ci+    if ((value > 0 && value < std::numeric_limits<double>::min()) || (value < 0 && value > -std::numeric_limits<double>::min())) {
12b6a906aeSopenharmony_ci+      decoded = value;
13b6a906aeSopenharmony_ci+      return true;
14b6a906aeSopenharmony_ci+    }
15b6a906aeSopenharmony_ci     return addError(
16b6a906aeSopenharmony_ci         "'" + String(token.start_, token.end_) + "' is not a number.", token);
17b6a906aeSopenharmony_ci   }
18